/** 这是更新路由的方法
 * this.$router.push({
 *    /*path:'/y',    //这是路由名称
 * })
// */
import Vue from 'vue';
import Router from 'vue-router';
import store from './store.js'; // 引入vuex

import article from './views/article/article';
import articleupdate from './views/article/articleupdate';
import articlecategory from './views/article/articlecategory';
import admin from './views/admin/admin';
import adminupdate from './views/admin/adminupdate';
import adminadd from './views/admin/adminadd';
import adminrole from './views/admin/adminrole';
import adminauth from './views/admin/adminauth';
import authDisbute from './views/admin/authDisbute';
import bak from './views/bak/bak';
import website from './views/bak/website';
import watermark from './views/bak/watermark';
import sowing_map from './views/bak/sowing_map';
import personal from './views/bak/personal';
import index from './views/index/index';
import login from './views/login/login';
import product from './views/product/product';
import productcategory from './views/product/productcategory';
import productbrand from './views/product/productbrand';
import productmodel from './views/product/productmodel';
import productspec from './views/product/productspec';
import productupdate from './views/product/productupdate';
import label from './views/label/label';
import friendlink from './views/friendlink/friendlink';
import gossip from './views/gossip/gossip';
import notice from './views/notice/notice';
import message from './views/message/message';
import comment from './views/comment/comment';
import resource from './views/resource/resource';
import user from './views/user/user';

import Home from './views/Home.vue';

// 引入axios组件
import axios from 'axios';
import qs from 'qs';

Vue.use(Router);

// export default new Router({
const router = new Router({
  routes: [
    {
      path: '/',
      name: 'index',
      component: index,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/article',
      name: 'article',
      component: article,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/articleupdate',
      name: 'articleupdate',
      component: articleupdate,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/articlecategory',
      name: 'articlecategory',
      component: articlecategory,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/admin',
      name: 'admin',
      component: admin,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/adminadd',
      name: 'adminadd',
      component: adminadd,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/adminupdate',
      name: 'adminupdate',
      component: adminupdate,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/adminrole',
      name: 'adminrole',
      component: adminrole,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/adminauth',
      name: 'adminauth',
      component: adminauth,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/authDisbute',
      name: 'authDisbute',
      component: authDisbute,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/bak',
      name: 'bak',
      component: bak,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/website',
      name: 'website',
      component: website,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/watermark',
      name: 'watermark',
      component: watermark,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/login',
      name: 'login',
      component: login,
    },
    {
      path: '/user',
      name: 'user',
      component: user,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/product',
      name: 'product',
      component: product,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/productcategory',
      name: 'productcategory',
      component: productcategory,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/productbrand',
      name: 'productbrand',
      component: productbrand,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/productmodel',
      name: 'productmodel',
      component: productmodel,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/productspec',
      name: 'productspec',
      component: productspec,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/productupdate',
      name: 'productupdate',
      component: productupdate,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/label',
      name: 'label',
      component: label,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/friendlink',
      name: 'friendlink',
      component: friendlink,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/gossip',
      name: 'gossip',
      component: gossip,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/sowing_map',
      name: 'sowing_map',
      component: sowing_map,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/notice',
      name: 'notice',
      component: notice,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/personal',
      name: 'personal',
      component: personal,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/message',
      name: 'message',
      component: message,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/comment',
      name: 'comment',
      component: comment,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      path: '/resource',
      name: 'resource',
      component: resource,
      meta: {
        requireAuth: true, // 添加该字段，表示进入这个路由是需要登录的
      },
    },
    {
      // 当路由不识别时，跳home===================================================================
      path: '**', // 错误路由
      redirect: '/', // 重定向
    }, //= =====================================================================================
    // {
    //   path: '/article/id',
    //   name: "articleert",
    //   component: article,
    //   // meta: {
    //   //   requireAuth: true,   // 添加该字段，表示进入这个路由是需要登录的
    //   // },
    // }
  ],
}); // 处理数据  qs.stringify(params)

// 全局路由守卫
// 用到了vuex 主要是用来存储数据
// to: Route: 即将要进入的目标 路由对象
// from: Route: 当前导航正要离开的路由
// next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
/**
 * 登录的时候存localstorage，登出的时候清空localstorage
 * localstorage说白了就是一个本地的Cookie，存的只是这台电脑，这个浏览器上的登录信息而已，
 * 所以先在localstorage中定义一个值，在进入这个网站的时候判断在localstorage中定义的那个值是否为空，为空跳登录页
 * 注意：localstorage在非正常退出的时候，是不会清空的。所以需要在登陆的时候存储登录时间，在下一次进路由守卫的时候
 * 去判断二者的时间，默认localstorage的生存时间是十个小时，超过十个小时，登录过期。重新登录
 * 登录路由判断参考链接：
 * https://www.jianshu.com/p/56448a7c565d
 */
router.beforeEach((to, from, next) => {
  // 在路由跳转之前做的事
  let userinfo = '';
  /* $.ajax({
    url: '/admin/base/getSession',
    type: 'POST', //GET
    async: false, //或false,是否异步
    data: {},
    timeout: 5000, //超时时间
    dataType: 'json', //返回的数据格式：
    success: function (response) {
      userinfo = response;
    },
    error: function (response) {
    }
  })// */

  axios({
    method: 'post',
    url: '/admin/base/getSession',
    data: {},
  })
    .then((response) => {
      userinfo = response;
      // 调用路由的方法，异步执行（可用jquery同步执行，但是阻塞UI）
      routerGuard();
    })
    .catch((response) => {
      alert('请求失败');
    });

  // 这个是使用localstronge存储方式存储的方法
  /* let nowtime = new Date().getTime();//获取当前时间戳  毫秒
  let sessiontime = nowtime - localStorage.logintime//当前时间  -  登录时间
  console.log(sessiontime)
  if (sessiontime > 18000000){
    localStorage.clear();
  }
  let userinfo = localStorage.userinfo;// */

  /**
   * 路由封的方法
   * 20180920
   */
  function routerGuard() {
    // 判断该路由是否需要登录权限
    if (to.meta.requireAuth) {
      if (userinfo !== undefined && userinfo.data.login_code !== -1) {
        const status = true;
        store.commit('putloginstatus', status);
        //= ================   路由跳页前业务逻辑代码 start   =======================
        // 定义一个变量存储路由变化时传过来的值
        const pathArray = to.path.split('/');
        // console.log(pathArray);//打印路径数组
        // store.commit("clear");//清除vuex中的数据
        if (pathArray[pathArray.length - 1] === '') {
          // 后台首页，数据概览
          axios({
            method: 'post',
            url: '/admin/index/index',
            data: {},
          })
            .then((response) => {
              store.commit('getindexinfo', response.data.title);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] === 'bak') {
          // 数据库备份页
          axios({
            method: 'post',
            url: '/admin/dbbak/baklist',
            data: {},
          })
            .then((response) => {
              store.commit('saveDbListInfo', response.data.dblist);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] == 'website') {
          axios({
            method: 'post',
            url: '/admin/website/websiteInfo',
            data: {},
          })
            .then((response) => {
              store.commit('getwebsiteinfo', response.data.websiteinfo);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] == 'watermark') {
          axios({
            method: 'post',
            url: '/admin/website/watermark',
            data: {},
          })
            .then((response) => {
              store.commit('getWaterInfo', response.data.waterinfo);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] == 'adminauth') {
          // 网站设置页
          axios({
            method: 'post',
            url: '/admin/admin/adminAuthList',
            data: {},
          })
            .then((response) => {
              store.commit('adminAuthlistinfo', response.data);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] == 'adminupdate') {
          // 添加修改管理员
          // var userid = localStorage.userid;
          axios({
            method: 'post',
            url: '/admin/admin/adminEdit',
            data: {},
            // data: {"userid":userid}
          })
            .then((response) => {
              // console.log(response);
              // store.commit("admineditprarm", response.data.admininfo);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] == 'articlecategory') {
          // 文章分类
          axios({
            method: 'post',
            url: '/admin/article/articleCategoryList',
            data: {},
          })
            .then((response) => {
              store.commit('getArticleCate', response.data);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] == 'productcategory') {
          // 商品分类
          axios({
            method: 'post',
            url: '/admin/product/productCategory',
            data: {},
          })
            .then((response) => {
              console.log(response);
              store.commit('getProductCate', response.data);
            })
            .catch((response) => {
              console.log(response);
            });
          /* } else if (pathArray[pathArray.length - 1] == 'productbrand') {
            // 商品品牌
            axios({
              method: "post",
              url: "/admin/product/productbrand",
              data: {}
            })
              .then(function (response) {
                console.log(response);
                store.commit("getProductBrand", response.data);
              })
              .catch(function (response) {
                console.log(response);
              });// */
          /* } else if (pathArray[pathArray.length - 1] == 'productmodel') {
            // 商品模型
            axios({
              method: "post",
              url: "/admin/product/productmodel",
              data: {}
            })
              .then(function (response) {
                console.log(response);
                store.commit("getProductModel", response.data);
              })
              .catch(function (response) {
                console.log(response);
              });// */
          /* } else if (pathArray[pathArray.length - 1] == 'productspec') {
            // 商品模型
            axios({
              method: "post",
              url: "/admin/product/productSpec",
              data: {}
            })
              .then(function (response) {
                console.log(response);
                store.commit("getProductSpec", response.data);
              })
              .catch(function (response) {
                console.log(response);
              });// */
          /* } else if (pathArray[pathArray.length - 1] == 'product') {
            // 商品模型
            axios({
              method: "post",
              url: "/admin/product/productList",
              data: {}
            })
              .then(function (response) {
                console.log(response);
                store.commit("getProductList", response.data);
              })
              .catch(function (response) {
                console.log(response);
              });// */
        } else if (pathArray[pathArray.length - 1] == 'sowing_map') {
          // 轮播图管理
          axios({
            method: 'post',
            url: '/admin/website/sowingList',
            data: {},
          })
            .then((response) => {
              console.log(response);
              store.commit('saveSowingList', response.data);
            })
            .catch((response) => {
              console.log(response);
            });
        } else if (pathArray[pathArray.length - 1] == 'personal') {
          // 个人信息
          axios({
            method: 'post',
            url: '/admin/website/personal',
            data: {},
          })
            .then((response) => {
              console.log(response);
              store.commit('getPersonalInfo', response.data);
            })
            .catch((response) => {
              console.log(response);
            });
        } else {
          // 走到这一步就说明导航里没有定义   所以直接跳首页
          // 后台首页，数据概览
          const self = this;
          axios({
            method: 'post',
            url: '/admin/index/index',
            data: {},
          })
            .then((response) => {
              store.commit('getindexinfo', response.data.title);
            })
            .catch((response) => {
              console.log(response);
            });
        }
        //= ================   路由跳页前业务逻辑代码 end   =======================
        next(); // 走完逻辑代码next执行跳页操作
      } else {
        console.log(userinfo);
        const status = false;
        store.commit('putloginstatus', status);
        if (userinfo.data.login_msg) {
          alert(userinfo.data.login_msg);
        }
        next({
          path: '/login',
        });
      }
    } else {
      next();
    } //* /
  }
  // const nextRoute = ['home', 'good-list', 'good-detail', 'cart', 'profile'];
  // next();

  // 登录状态函数(没啥用了)
  function loginstate(code, msg) {
    if (code == -1) {
      const status = false;
      store.commit('putloginstatus', status);
      if (msg) {
        alert(msg);
      }
      next({
        path: '/login',
      });
    }
  }
});

export default router;
